[Looker]日付型のフィールドを用いたフィルタの分かりづらい所を試してみる #looker
さがらです。
Lookerでグラフを作る時は、Explore上で必要なディメンションやメジャーを選択し、必要なフィルタをかけてデータの絞り込みを行う、という流れは一般的かと思います。
なのですがExploreでグラフを作成する際、「日付型フィールドに対するフィルタ」に関してはとても選択肢が多く、日本語環境と英語環境それぞれ使用している身からすると、「どう使えば良いんだっけ…」となってしまうことが正直多いです。
そこで、「日付型フィールドに対するフィルタ」について、自分が分かりづらいと感じた所をまとめてみたいと思います。
前置き:日付型フィールドのフィルタの選択肢一覧
まずExploreの「日付型フィールドに対するフィルタ」では、それぞれどんな選択肢があるのか、まとめてみたいと思います。 (Lookerのバージョンは、21.0.25です。)
まず、何かしらの日付型フィールドをフィルタにかけると、下図のように表示されるかと思います。
左側のドロップダウンリストからは、「絞り込む方法」を選択できます。これだけでも選択肢の数が多いですよね…
続いて、選択した絞り込む方法に応じて、単位側もドロップダウンリストが表示されることがあります。
まず、is in the past(が過去)
を選択したときは、下図のように単位側も選択できます。これまた多い上に、初見の場合は「”終了した日”ってなんだ??」となってしまうと思います…
また、is before(が次の日以前)
とis on or after(が次の日以降)
を選択した上でrelative(相対指定)
を選ぶと、単位側が下図のように選択できます。こちらも数が多いですね…
本ブログで試してみること
このブログでは、少し試せばわかるようなis on the day(が次の日である)
等は説明を省き、個人的に分かりづらいと感じた以下の3つの内容にフォーカスしたいと思います。
complete(終了した)
の有無によって何が変わるかweeks
を選択した時、週の開始曜日を変えられるかmatches (advanced) (が次に一致する(高度フィルタ))
を使うのはどういった時か
「complete(終了した)」の有無によって何が変わるか
最初に、complete(終了した)
の有無によってどう変化するか、確認してみます。この選択肢は、絞り込み方法にis in the past(が過去)
を選択した時だけ表示されます。
まずは、ただのmonths
での挙動を見てみます。
検証したのは2021/3/24ですが、当月である3月も含めて、過去3ヶ月分が表示されていますね。
では、complete months
ではどうでしょうか。
今度は、2020年12月~2021年2月までが表示されました。これは、3月はまだcomplete(終了)していないため、直近のcompleteした月である2月を起点として3ヶ月分を表示してくれているからです。
この仕様は、他のcomplete days
などでも同様の仕様です。
接続先のDWHには毎時データが入ってくるが、Lookerで見せるダッシュボードではその日の実績が確定したデータだけを表示させたい、といった用途のときには、is in the past(が過去)
を選択した上で、complete(終了した)
を含む単位を選択すると良いかと思います。
「weeks」を選択した時、週の開始曜日を変えられるか
続いて、weeks
について見ていきます。
まず、Lookerにおける週の開始曜日のデフォルト値は月曜日です。
例として、下図のように1 complete weeks
で選択すると、月曜日である2021/3/15を起点として表示されます。
一方で、「業務の集計内容の関係上、日曜日を週始めとしたい」という方もいるのではないでしょうか。
こんなときは、week_start_day
というパラメータを使います。ポイントとしては、modelファイルの直下に記述することです。このため、対象のmodel上の全てのExploreで週の開始曜日が変わってしまうことは注意しないといけません。
実際に適用してみた例が下図になります。week_start_day
でsundayとしてあげることで、1 complete weeks
でフィルタを絞り込むと、日曜日である2021/3/14を起点として表示されるようになりました!
「matches (advanced)」を使うのはどういった時か
最後に、matches (advanced) (が次に一致する(高度フィルタ))
について考えてみます。
このmatches (advanced)
は簡単にいうと、ルールに沿った英文の記述をすることでフィルタの内容を定義できる、というものです。
公式Docにサンプルが多くありますので、こちらも御覧ください。
一方で、このmatches (advanced)
を使用するのはどういった時なのか、気になる方もいるのではないでしょうか。
基本的には、既存のGUIから選択できるフィルタではどうしてもできない時に使用する機能だと思います。
このブログでは1つ、matches (advanced)
を使用した事例を紹介したいと思います。
事例
「2週間前の定めたweek_start_dayを起点として、その起点から1週間分のデータを表示させる」ということを考えてみます。
まず思いつく方法として、is in range
で対象とする期間を指定してしまう方法がありますが、毎日見るダッシュボードの場合、都度日付を変更しないと見たい結果が得られないので運用が大変になってしまいます。
一方で汎用的な方法がないかGUIで選択できる条件から考えてみると、今日を起点とした2週間分のデータであればis in the past
で対応できるのですが、「今日から2週間遡り、その内の最初の1週間分だけを取得する」ということは難しいです。起点を変更した上で、その起点から所定の期間だけのデータを取得する、ということが難しいのです。
そこで、matches (advanced)
の出番です!
書き方としては、2 weeks ago for 1 week
と記述します。
最初の2 weeks ago
で起点を定め、後ろのfor 1 week
でその起点からどれだけの期間を取得するか、という意味になっています。
実際に適用した結果が下図になります。この検証を行った3/24の2週間前は3/10となり、week_start_dayはデフォルト値のMondayなので週の起点は3/8となります。この3/8を起点に1週間分を表示するので、3/8~3/14のデータが表示されるようになります。
ちなみに、「weeks」を使った場合はweekだけで記述しなければいけないのかというと、そんなことはありません。
全く違う例ですが下図のように、this week for 2 days
と記述することも可能です。week_start_day
をSaturdayに設定して、最新の土日のデータを常に表示するようにする、といった運用も出来るかと思います。
最後に
どんなBIツールでも、ダッシュボードを作成する上で日付型のフィールドを用いたフィルタはほぼ必須かと思います。
少しでも参考になれば幸いです!